package fnsvr

import "time"

// 实现非阻塞读取值
func ReadNonBlocking[T any](ch <-chan T) (T, bool) {
	select {
	case v := <-ch:
		return v, true // 通道有数据时立即返回‌:ml-citation{ref="5" data="citationList"}
	default:
		var zero T
		return zero, false // 通道无数据时直接返回‌:ml-citation{ref="5" data="citationList"}
	}
}

// 实现带超时的读取值
func ReadWithTimeout[T any](ch <-chan T, timeout time.Duration) (T, bool) {
	select {
	case v := <-ch:
		return v, true
	case <-time.After(timeout):
		var zero T
		return zero, false // 超时未读取到数据
	}
}

// 实现非阻塞从两个通道读取值
func Read2NonBlocking[T any](ch1 <-chan T, ch2 <-chan T) (T, bool) {
	select {
	case v := <-ch1:
		return v, true // 通道有数据时立即返回‌
	case v := <-ch2:
		return v, true
	default:
		var zero T
		return zero, false // 通道无数据时直接返回‌
	}
}
